Computing systems have made significant contributions toward the advancement of modern society and are utilized in a number of applications to achieve advantageous results. Numerous devices, such as desktop personal computers (PCs), laptop PCs, tablet PCs, netbooks, smart phones, servers, and the like have facilitated increased productivity and reduced costs in communicating and analyzing data in most areas of entertainment, education, business, and science. One common aspect of computing systems is the application programming interface (API), which is a set of routines, protocols and tools that define functionalities that are independent of the respective implementation, for building applications, communicating between applications, and/or for accessing hardware resources of a computing system.
In conventional APIs, applications bind/attach resources like textures and rendertargets to a context. The driver tracks all these attachments in order to understand the dependencies and to insert wait for idle operations (WFIs), cache invalidations, and the like, as needed. The cost of tracking these attachments is one of the main central processing unit (CPU) bottlenecks in the system. In more recent APIs, there is a desire to eliminate the binding of resources. In bindless APIs, the application specifies “resource transitions” on objects when their usage changes, like switching from rendering to a texture, to texturing from it. This provides the same information as the bindings in older APIs, except as separate/explicit commands, rather than implicitly as a side effect of binding. This approach is function, albeit heavy-handed, for synchronization and cache control, but lacks tiling information and the like. It is also cumbersome for applications, which must sometimes apply transitions to hundreds of object to specify a single “dependency.” The out of order nature of works specification vs work submission (via command buffer record/play) further complicates the conventional bindless systems. Accordingly, there is a continued need for improved bindless APIs.